﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HS.Domain.EF;
using System.Data.Entity;

namespace HS.Business.Security
{
    public class SolicitudServicioBusiness
    {
        public SolicitudServicio CreateEntity()
        {
            return new SolicitudServicio()
            {
                Cliente = new Cliente() { 
                    Distrito = new Distrito(),
                    Provincia = new Provincia(),
                    Departamento = new Departamento(),
                    TipoDocumento = new TipoDocumento()
                },
                MedioPago = new MedioPago(),
                Subtipos = new List<Subtipo>(),
                Tecnico = new Tecnico(),
                RowStatus = true
            };
        }

        public SolicitudServicio GetEntityByPK(int? id, bool? rowStatus)
        {
            HomeSolutionsDBEntities context = new HomeSolutionsDBEntities();

            var dbset = context.Set<SolicitudServicio>();

            return dbset.Include(p => p.Cliente.Distrito.Provincia.Departamento)
                        .Include(p => p.MedioPago)
                        .Include(p => p.Subtipos)
                        .Include(p => p.Tecnico)
                        .Where(p => p.IdSolicitudServicio == id
                           && (rowStatus != null ? p.RowStatus == rowStatus : p.RowStatus == true))
                        .FirstOrDefault();
        }

        public List<SolicitudServicio> GetEntities(int? idSolicitudServicio, string codigoRegistro, bool? rowStatus)
        {
            HomeSolutionsDBEntities context = new HomeSolutionsDBEntities();

            var dbset = context.Set<SolicitudServicio>();

            return dbset.Include(p => p.Cliente.Distrito.Provincia.Departamento)
                        .Include(p => p.MedioPago)
                        .Include(p => p.Subtipos)
                        .Include(p => p.Tecnico)
                        .Where(p => p.IdSolicitudServicio == idSolicitudServicio
                                 && p.CodigoRegistro.Contains(codigoRegistro)
                                 && (rowStatus != null ? p.RowStatus == rowStatus : p.RowStatus == true))
                        .ToList();
        }

        public int GetMaxCodigo()
        {
            HomeSolutionsDBEntities context = new HomeSolutionsDBEntities();
            
            var dbset = context.Set<SolicitudServicio>();
            
            return Convert.ToInt32(dbset
                    .Max(p => p.CodigoRegistro));
        }
    }
}
